package com.chenyu.util;

/**
 * 这种方式是当被调用getInstance()时才去加载静态内部类LazyHolder，
 * LazyHolder在加载过程中会实例化一个静态的Single，
 * 因为利用了classloader的机制来保证初始化instance时只有一个线程，
 * 所以Single肯定只有一个，是线程安全的，这种比上面1、2都好一些，既实现了线程安全，又避免了同步带来的性能影响。
 */
public class Single {
        private static class LazyHolder {
            private static final Single INSTANCE = new Single();
        }
        private Single (){
            System.out.println("启动");
        }
        public static final Single getInstance() {
            return LazyHolder.INSTANCE;
        }
}

// 1   //懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton {
//    private Singleton() {}
//    private static Singleton single=null;
//    //静态工厂方法
//    public static Singleton getInstance() {
//        if (single == null) {
//            single = new Singleton();
//        }
//        return single;
//    }
//}
//
// 2.1  public static synchronized Singleton getInstance() {
//        if (single == null) {
//        single = new Singleton();
//        }
//        return single;
//        }
//2.2
//public static Singleton getInstance() {
//        if (singleton == null) {
//synchronized (Singleton.class) {
//        if (singleton == null) {
//        singleton = new Singleton();
//        }
//        }
//        }
//        return singleton;
//        }